"""
原以为使用了异步语法 执行IO阻塞操作时 异步函数会自动中断 去执行其他函数
事实上并不是 想让异步函数中断 需要用await关键字
而且await后面的对象需要是一个Awaitable 或者实现了相关的协议
只要一个类实现了__await__方法 它的对象就是Awaitable
"""
import asyncio

import requests

txt_path = '../test.txt'


async def func1():  # 网络IO
    print("start---1")
    requests.get('http://httpbin.org/get')
    print("end---1")


async def func2():  # 文件IO
    print("start---2")
    with open(txt_path) as f:
        f.read()
    print("end---2")


async def func3():  # 参照函数
    print("start---3")
    print("end---3")


async def main():
    tasks = [
        asyncio.create_task(func1()),
        asyncio.create_task(func2()),
        asyncio.create_task(func3()),
    ]
    await asyncio.wait(tasks)


if __name__ == '__main__':
    asyncio.run(main())
